import {
	getFormDataParams
} from '@/common/upload-oss/getSignature.js';
import { dateToString } from '@/common/util.js'



/**
 * 2. 图片上传到oss
 */
export const uploadOss = async ({
	filePathFore,
	filePath
}) => {
	return new Promise(async (resolve) => {
		console.log('开始oss')
		console.log("文件路径： ", filePath);
		// console.log("存储oss的文件路径：", filePathFore);
		const res = await getFormDataParams() //请求后台获取oss签名信息
		// console.log('oss', res)
		//获取文件扩展名，根据后台返回的值而取
		// let fileType = filePath.substring(filePath.lastIndexOf('.')) || '.jpg' //获取图片类型后缀 .jpg .png
		// console.log("文件扩展名：", fileType);
		// 获取时间格式
		const time = dateToString(new Date());
		console.log("time: ", time);
		const userName = uni.getStorageSync('userName');
		// console.log("userName: ", userName);
		// 文件名
		const fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
		console.log("文件名: ", fileName);
		let key =
			`${filePathFore}${userName}${time}${fileName}` //那么我们上传到oss上，路径就是 filePathFore/fzg20211112.png 
		console.log('key: ', key)
		const host = 'https://jyapp-fzg.oss-cn-hangzhou.aliyuncs.com/'
		uni.uploadFile({
			url: host,
			filePath: filePath,
			name: 'file', // 必须填file。
			formData: {
				key, //文件名
				policy: res.policy, //后台获取超时时间
				OSSAccessKeyId: res.OSSAccessKeyId, //后台获取临时ID
				signature: res.signature, //后台获取签名
				'x-oss-security-token': res['x-oss-security-token'], // 使用STS签名时必传。
				success_action_status: '200', //让服务端返回200,不然，默认会返回204
			},
			success: (res) => {
				console.log('结果', res)
				if (res.statusCode === 200) {
					console.log('上传成功');
					// uni.showToast({
					// 	title: '上传成功！',
					// 	icon: 'none'
					// })
					resolve(host + key) //上传成功后，将我们所自定义的key（文件路径名）返回出去
				}else {
					uni.showToast({
						title: '系统异常,请稍后再试...',
						icon: 'none'
					})
				}
			},
			fail: err => {
				console.error(err);
				uni.showToast({
					title: '系统异常,请稍后再试...',
					icon: 'none'
				})
			}
		})
	})
}


// 删除指定图片
export const deleteFile = async (filePath) => {

	//本地存储获取oss签名信息
	const res = await getFormDataParams()

	// 构造删除请求的 URL
	// const ossUrl = `https://${BucketName}.${Region}.oss-cn-hangzhou.aliyuncs.com/${fileName}`;
	const ossUrl = `https://jyapp-fzg.oss-cn-hangzhou.aliyuncs.com/${filePath}`;

	// 根据 OSS 的 API 文档，你需要生成一个签名，并将其添加到请求头中
	// 这里是一个简化的签名生成示例，实际使用时请根据你的 OSS 提供商的文档来生成签名
	// 注意：签名生成通常涉及时间戳、请求参数、AccessKeySecret 等，并且需要在服务器端完成以确保安全
	// 下面的代码只是为了展示如何在请求头中包含签名，并不是实际的签名生成代码
	const signature = res.signature;
	const AccessKeyId = res.OSSAccessKeyId;
	const securityToken = res['x-oss-security-token']; // 获取安全令牌
	// 构造请求头
	const header = {
		'Content-Type': 'application/xml', // 或者其他 OSS 要求的 Content-Type
		'Date': new Date().toUTCString(), // 有些 OSS 要求包含日期头
		'Authorization': `OSS ${AccessKeyId}:${signature}`, // 根据 OSS 文档构造 Authorization 头
		'x-oss-security-token': securityToken, // 确保添加安全令牌到请求头
		// ... 可能还有其他需要的头，如 x-oss-version-id 等
	};

	uni.request({
		url: ossUrl,
		method: 'DELETE',
		header: header,
		success: (res) => {
			if (res.statusCode === 204) {
				// 204 状态码表示删除成功，没有内容返回
				console.log('图片删除成功');
			} else {
				// 处理其他状态码
				console.error('删除失败，状态码：', res.statusCode);
				console.error('响应数据：', res.data);
			}
		},
		fail: (err) => {
			// 处理请求失败的情况
			console.error('请求失败：', err);
		}
	});
}